//
//  BSHomeTableViewController.swift
//  mySwiftWeibo
//
//  Created by apple on 16/7/18.
//  Copyright © 2016年 itcast沈庆伟. All rights reserved.
//

import UIKit
import SVProgressHUD


class BSHomeTableViewController: BSBaseTableViewController {
    
    private let reuseIdentifier = "reuseIdentifier"
    
    ///微博模型数组
    var statusModels: [BSStatus]?{
        didSet{
            //微博数据发生了改变,刷新tableview
            self.tableView.reloadData()
        }
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        //判断登录
        if !BSUserAccountViewModel.sharedUserAccountViewModel.userLogin{
            //没登录
            return
        }
        //已经登录,登录走设置navigationBar
        setupNavigationBar()
        self.setupTableView()
        
        //添加下拉刷新控件
        self.tableView.addSubview(pullDownToRefreshControl)
        
        //设置下拉刷新时的闭包
        self.pullDownToRefreshControl.refreshingCallBack = { () -> Void in
            //下拉刷新控件进入刷新状态了
            self.loadNewStatus()
        }
        //自动刷新
        self.pullDownToRefreshControl.beginRefresh()
        
        //
    }
    
    ///设置tableview
    private func setupTableView(){
        //注册cell
        self.tableView.registerClass(BSStatusCell.self, forCellReuseIdentifier: reuseIdentifier)
        
        //让cell的高度自适应cell的内容
        self.tableView.estimatedRowHeight = 200
        self.tableView.rowHeight = UITableViewAutomaticDimension
        self.tableView.separatorStyle = UITableViewCellSeparatorStyle.None
    }
    
    ///加载新的微博数据
    private func loadNewStatus(){
        //获取现有微博数据中id最大的微博
        //self.statuses?.first 获取数组中第一个元素
        //当第一次进入程序 self.statuses 没有值, since_id = 0,加载最新20条微博数据
        let since_id = self.statusModels?.first?.id ?? 0
        
        //使用viewmodel的方法加载微博数据
        BSStatusViewModel.sharedStatusViewModel.loadStatus(since_id, max_id:0) { (error, statusModels) -> Void in
            
            //网络请求完成了
            //关闭刷新控件
            self.pullDownToRefreshControl.endRefreshing()
            
            //判断网络请求是否有错误
            if error != nil{
                SVProgressHUD.showErrorWithStatus("获取微博数据失败")
                print("下拉刷新数据失败原因: \(error)")
                return
            }
            
            //判断返回的微博数据是否有
            let count = statusModels?.count ?? 0
            
            if count == 0 {
                print("没有加载到微博数据")
                return
            }
            
            //加载到了微博数据
            print("下拉刷新加载到了 \(count) 条微博数据")
            
            if since_id == 0 {
                //第一次进入程序,加载最新的微博数据
                self.statusModels = statusModels
            }else{
                //之前有微博数据,下拉加载更新的微博
                self.statusModels = statusModels! + self.statusModels!
            }
        }
    }
    
    ///设置导航栏
    private func setupNavigationBar(){
        self.navigationItem.leftBarButtonItem=UIBarButtonItem(imageName: "navigationbar_friendsearch")
        self.navigationItem.rightBarButtonItem=UIBarButtonItem(imageName: "navigationbar_pop")
        
        //获取用户名称
        let screen_name = BSUserAccountViewModel.sharedUserAccountViewModel.userAccount?.screen_name ?? "默认名字"
        let titleButton=BSHomeTitleButton(title: screen_name)
        titleButton.addTarget(self, action: "titleButtonClick:", forControlEvents: UIControlEvents.TouchUpInside)
        self.navigationItem.titleView=titleButton
    }
    
    //MARK: - 按钮点击事件
    @objc private func titleButtonClick(button: UIButton){
        //print(__FUNCTION__)
        button.selected = !button.selected
        let transform = button.selected ? CGAffineTransformMakeRotation(CGFloat(M_PI - 0.001)) : CGAffineTransformIdentity
        UIView.animateWithDuration(animationInterval) { () -> Void in
            button.imageView?.transform=transform
        }
    }
    
    //MARK: - 懒加载
    ///下拉刷新控件
    private lazy var pullDownToRefreshControl: BSPullDownRefreshView=BSPullDownRefreshView()
}

//MARK: - tableview数据源方法
extension BSHomeTableViewController{
    
    //cell数量
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        //避免返回nil,Int不能返回一个nil
        return self.statusModels?.count ?? 0
    }
    
    //返回cell
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier(reuseIdentifier, forIndexPath: indexPath) as! BSStatusCell
        
        //cell内容--能来到这里,说明statusModels更定有值了,因numberOfRows处已经过滤了
        let status = self.statusModels![indexPath.row]
        
        //赋值模型
        cell.status=status
        
        return cell
    }
    
    //取出cell选中时的高亮
    override func tableView(tableView: UITableView, shouldHighlightRowAtIndexPath indexPath: NSIndexPath) -> Bool {
        return false
    }
    
}
